package com.doit.day05

object _06_伴生类和伴生对象 {
  def main(args: Array[String]): Unit = {
    val tom: Cat = new Cat(1, "tom")
//    tom.age   //私有的属性，外界访问不了
//    Cat.color
    val tom1: Cat = Cat(1, "tom")


  }

}

//什么样的类是伴生类伴生对象呢？？
//class类和object类这两个类的类名一样 ，那么 这两个类就相伴相生
//这种情况下，class类称为object类的伴生类  object类是class类的伴生对象

//为什么要搞出来这么个稀奇古怪的东西呢？？
//我想在一个类中，既想搞一个静态的东西，又想搞一个非静态的东西

/**
 * 伴生类和伴生对象的作用：
 * 1.动静分离
 * 2.可以相互访问对方的私有属性,而外界访问不了
 * 3.可以写apply方法,使得创建对象的时候不用new
 * 4.可以写unapply方法,使得这个类能够很好的应用于模式匹配
 */
class Cat(val id:Int,var name:String){
  private val age:Int = 19
//  Cat.color
}

object Cat{
  val weight:Double = 100
  private val color:String = "白色"

  //重写apply方法
  def apply(id: Int, name: String): Cat = new Cat(id, name)

  //能够很好的运用于模式匹配
  def unapply(arg: Cat): Option[(Int, String)] = Some(arg.id, arg.name)

}
